﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text;
using Business.Entities;

namespace Data.DataBase
{
    public class ComisionAdapter : Data.Database.Adapter
    {
        private static List<Comision> _Comisiones;

        public static List<Comision> Comisiones
        {
            get 
            { 
                if(_Comisiones == null)
                {
                    _Comisiones = new List<Comision>();
                    Business.Entities.Comision com;

                    com = new Comision();
                    com.Id = 1;
                    com.IdPlan = 1;
                    com.AnioEspecialidad = 2014;
                    com.Descripcion = "3k4";
                    com.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _Comisiones.Add(com);

                    com = new Comision();
                    com.Id = 2;
                    com.IdPlan = 1;
                    com.AnioEspecialidad = 2014;
                    com.Descripcion = "3k3";
                    com.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _Comisiones.Add(com);

                    com = new Comision();
                    com.Id = 3;
                    com.IdPlan = 1;
                    com.AnioEspecialidad = 2014;
                    com.Descripcion = "3k2";
                    com.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _Comisiones.Add(com);

                    com = new Comision();
                    com.Id = 4;
                    com.IdPlan = 1;
                    com.AnioEspecialidad = 2014;
                    com.Descripcion = "3k1";
                    com.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _Comisiones.Add(com);
                }
                return ComisionAdapter._Comisiones; 
            }
            
        }

        public Business.Entities.Comision GetOne(int id)
        {
            return Comisiones.Find(delegate(Comision c) { return c.Id == id; });
        }

        public List<Business.Entities.Comision> GetAll()
        {
            return new List<Comision>(Comisiones);
        }

        public void Save(Business.Entities.Comision comision)
        {
            switch (comision.State)
            {
                case BusinessEntity.States.New:
                    int nuevoId = 0;
                    // esta busqueda podria reemplazarse por un OrderBy que orden por ID.
                    foreach (Comision com in Comisiones)
                    {
                        if (com.Id > nuevoId)
                        {
                            nuevoId = com.Id;
                        }
                    }
                    comision.Id = nuevoId + 1;
                    Comisiones.Add(comision);
                    break;
                case BusinessEntity.States.Modified:
                    Comisiones[Comisiones.FindIndex(delegate(Comision c) { return c.Id == comision.Id; })] = comision;
                    break;
                case BusinessEntity.States.Deleted:
                    this.Delete(comision);
                    break;
            }
            comision.State = BusinessEntity.States.Unmodified;
        }

        public void Delete(int id)
        {
            this.Delete(this.GetOne(id));
        }

        public void Delete(Business.Entities.Comision comision)
        {
            Comisiones.Remove(comision);
        }

    }
}
